'use strict';

const { Service } = require('egg');
const ModelName = 'Device'
class RouterService extends Service {
  /**
   * 根据分页和搜索条件获取
   * @param {Object} where 查询用户的条件
   * @param {Number} page 当前分页
   * @param {Number} pageSize 当前页每页多少条
   */
  async getPage(where, page, pageSize) {
    return this.ctx.model[ModelName].findAndCountAll({
      where,
      offset: pageSize * (page - 1),
      limit: pageSize,
      order:[
        // id 降序
        ['create_time','ASC']
      ],
    });
  }

  // 所有列表
  async allList(where = {}) {
    return this.ctx.model[ModelName].findAll({
      order:[
        // id 降序
        ['create_time','ASC']
      ],
      where
    });
  }
  async findOne(id) {
    return this.ctx.model[ModelName].findOne({
      where: {
        id,
      },
    });
  }

  /**
   * 创建
   * @param {*} data 角色信息
   */
  async create(data) {
    return this.ctx.model[ModelName].create(data);
  }

  /**
   * 根据ID修改
   * @param {Number} id ID
   * @param {Object} data 要修改的信息
   */
  async update(id, data) {
    return await this.ctx.model[ModelName].update(data, { where: { id } });
  }

  /**
   * 连接设备
   * @param pre_device_id 解绑设备id
   * @param device_id 绑定设备id
   * @param member_id 用户id
   * @returns {Promise<*>}
   */
  async collect(data) {
    const { pre_device_id, device_id, member_id } = data
    // 解绑设备
    if (pre_device_id) {
      await this.ctx.model.ConnectionHistory.create({
        device_id: pre_device_id,
        member_id,
        type: 0,
      })
    }
    // 绑定设备
    const connectRes = await this.ctx.model.ConnectionHistory.create({
      device_id,
      member_id,
      type: 1,
    })
    // 更新用户绑定的设备
    return await this.ctx.model.Member.update({ device_id, connect_id: connectRes.dataValues.id }, { where: { id: member_id } })
  }

  /**
   * 更新设备启用状态
   * @param data
   * @returns {*}
   */
  async enable(data) {
    const { device_id, member_id, connect_id, enable_status } = data
    // 记录设备启用状态
    const enableRes = await this.ctx.model.EnableHistory.create({
      member_id,
      device_id,
      connect_id,
      type: enable_status,
    })
    // 更新设备连接的启用状态
    await this.ctx.model.ConnectionHistory.update({ enable_status }, { where: { id: connect_id } })
    // 更新用户的启用id
    return await this.ctx.model.Member.update({ enable_id: enableRes.dataValues.id }, { where: { id: member_id } })
  }
  /**
   * 根据id删除
   * @param {Number}
   */
  async deleteById(id) {
    return await this.ctx.model[ModelName].destroy({ where: { id } });
  }
}

module.exports = RouterService;
